package com.sys.common.utils;

import java.util.Date;

/**
 * 订单编号生成工具类
 * 基于若依框架工具类实现20位订单编号生成
 */
public class OrderNumberUtils {

    /**
     * 生成20位订单编号
     * 组成规则: 14位时间戳(yyyyMMddHHmmss) + 6位随机数
     * @return 20位订单编号
     */
    public static String generate20BitOrderNo() {
        // 1. 使用DateUtils生成14位时间戳字符串(年月日时分秒)
        String timePart = DateUtils.parseDateToStr("yyyyMMddHHmmss", new Date());

        // 2. 使用Java自带的Random生成6位随机数字
        java.util.Random random = new java.util.Random();
        // 生成 100000（包含）到 999999（包含）之间的随机数，确保是6位
        int randomNum = random.nextInt(900000) + 100000;
        String randomPart = String.valueOf(randomNum);

        // 3. 拼接成20位订单编号并返回
        return timePart + randomPart;
    }

    /**
     * 生成包含业务标识的20位订单编号
     * 组成规则: 2位业务标识 + 12位时间戳(MMddHHmmssSS) + 6位随机数
     * @param businessCode 2位业务标识
     * @return 20位订单编号
     */
    public static String generate20BitOrderNoWithBiz(String businessCode) {
        if (businessCode == null || businessCode.length() != 2) {
            throw new IllegalArgumentException("业务标识必须为2位字符");
        }

        // 1. 生成12位短时间戳(月日时分秒毫秒)
        String timePart = DateUtils.parseDateToStr("MMddHHmmssSS", new Date());

        // 2. 使用Java自带的Random生成6位随机数字
        java.util.Random random = new java.util.Random();
        int randomNum = random.nextInt(900000) + 100000;
        String randomPart = String.valueOf(randomNum);

        // 3. 拼接成20位订单编号并返回
        return businessCode + timePart + randomPart;
    }
}